// BIMFACE 模型处理-模型转换相关接口
// https://bimface.com/docs/model-derivative/v1/api-reference/translateUsingPUT_1.html

import  bimfaceHttp from '@/api/Bimface';
import {
  TranslateBeanModel,
  TranslateDetailModel,
  TranslateResponseModel,
} from './model/translateModel';

enum Api {
  Translate = '/v2/translate',
  TranslateStatus = '/translate',
  TranslateDetails = '/translateDetails',
}

/**
 * @abstract: 发起转换
 * @description: 源文件上传成功后，即可发起对该文件的转换，默认会转换为流式加载V3.0的数据。由于转换不能立即完成，BIMFACE支持在文件转换完成以后，通过Callback机制通知应用；另外，应用也可以通过接口查询转换状态。
 */
export function translate(data: {
  callback?: string;
  source: {
    rootName?: string;
    compressed: boolean;
    fileId: number | string;
  };
  config?: object | null;
}) {
  return bimfaceHttp.put<TranslateBeanModel>({ url: Api.Translate, data: data });
}

/**
 * @abstract: 获取转换状态
 * @description: 应用发起转换以后，可以通过该接口查询转换状态。
 */
export function getTranslateStatus(params: { fileId: string }) {
  return bimfaceHttp.get<TranslateBeanModel>({ url: Api.TranslateStatus, params: params });
}

/**
 * @abstract: 批量获取转换状态详情
 * @description: 应用发起转换以后，可以根据筛选条件，通过该接口批量查询转换状态详情
 */
export function getTranslateStatusDetailInBatches(data: {
  sourceId?: string;
  fileName?: string;
  endDate?: string;
  pageSize?: number;
  suffix?: string;
  sortType?: string;
  pageNo?: number;
  appKey?: string;
  keyword?: string;
  outputFormat?: string;
  projectId: number;
  startDate: string;
  fileId?: number;
  status?: number; // 转换状态，99代表转换成功，-1代表转换失败，1代表转换中，-2代表支付失败，0代表准备中
}) {
  return bimfaceHttp.post<TranslateDetailModel>({ url: Api.TranslateDetails, data: data });
}

/**
 * @abstract: 获取转换资源列表
 * @description: 应用发起转换以后，可以根据筛选条件，通过该接口批量查询指定项目下的转换详情列表，返回值可包含文件夹层级关系。
 */
export function getTranslateSourceList(
  projectId: number,
  data: {
    startDate: string; // 发起转换开始日期，采用ISO8601标准表示，并使用UTC +0时间，格式为yyyy-MM-ddTHH:mm:ss.MSZ
    endDate?: string;
    pageSize?: number;
    suffix?: string;
    keyword?: string;
    recursive?: boolean;
    outputFormat?: string;
    parentId?: string;
    excludeFolder?: boolean;
    status?: number; // 转换状态，99代表转换成功，-1代表转换失败，1代表转换中，-2代表支付失败，0代表准备中
    searchAfter: Array<any>;
  },
) {
  return bimfaceHttp.post<TranslateResponseModel>({
    url: `/v1/${projectId}/translations`,
    data: data,
  });
}
